﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Security.Principal;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Collections.Generic;


public partial class Cronograma : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         if (!IsPostBack)
         {
            IPrincipal p = HttpContext.Current.User;
            if (!p.IsInRole("Empleado"))
            {
                Session["Mensaje"] = "Usted no posee los permisos necesarios para ingresar a esta página";

                if (Session["Identificador"] != null)
                {
                    Session["IrAPagina"] = "Principal_Clientes.aspx";
                    Response.Redirect("Bienvenida.aspx");
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                precargar();
                LinkedList<CronogramaGui> LinkedList = new LinkedList<CronogramaGui>();
                Session["ActividadesGui"] = LinkedList;
            }
         }
    }
    
    protected void precargar()
    {

        App_Negocio.Evento evento = new App_Negocio.Evento();
        evento.Id = int.Parse(Session["EventoId"].ToString());
        DataTable dt = evento.buscarEvento();

        lblEvento.Text = "" + evento.Id;
        lblFecha.Text = DateTime.Parse(dt.Rows[0]["Fecha"].ToString()).ToShortDateString();
        lblHora.Text = DateTime.Parse(dt.Rows[0]["HoraInicio"].ToString()).ToShortTimeString();
        //DateTime.hora = DateTime.Parse(dt.Rows[0]["HoraInicio"].ToString()).ToShortTimeString();
        //lblHora.Text = hora.ToShortDateString();
        lblNombre.Text = dt.Rows[0]["Nombre"].ToString();
        lblTipoEvento.Text = dt.Rows[0]["TipoEve"].ToString();
        lblSalon.Text = dt.Rows[0]["NomSalon"].ToString();

        cargarComboActTipo();
    }

    protected void cargarComboActTipo()
    {
        App_Negocio.ActividadTipoCronograma act = new App_Negocio.ActividadTipoCronograma();
        DataTable dt = act.popularActividadTipo();

        ddlActividadTipo.DataSource = dt;
        ddlActividadTipo.DataTextField = "Nombre";
        ddlActividadTipo.DataValueField = "Id";
        ddlActividadTipo.DataBind();

    }

    private class CronogramaGui
    {
        int idActividad;

        public int IdActividad
        {
            get { return idActividad; }
            set { idActividad = value; }
        }
        DateTime hora;

        public DateTime Hora
        {
            get { return hora; }
            set { hora = value; }
        }
        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }
        private string descripcion;

        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }

        public CronogramaGui(DateTime hora, String descripcion, App_Negocio.Actividad act)
        {
            this.Nombre = act.Nombre;
            this.idActividad = act.Id;
            this.hora = hora;
            this.descripcion = descripcion;
        }
    }

    protected void gvEmpleados_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        //LinkedList<Invitado> bebidaList = (LinkedList<Bebida>)Session["detallesBebida"];
        //Bebida bebida = bebidaList.ElementAt<Bebida>(grvBebidasSeleccionadas.SelectedIndex);//con e.rowindex capaz anda               
        //bebidaList.Remove(bebida);
        //grvBebidasSeleccionadas.DataSource = bebidaList;
        //grvBebidasSeleccionadas.DataBind();
        //Session["detallesBebida"] = bebidaList;
    }

    protected void gvEmpleados_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
    { }

    protected void gvEmpleados_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void ddlActividadTipo_SelectedIndexChanged(object sender, EventArgs e)
    {
        ddlActividad.Items.Clear();
        ddlActividad.Items.Add(new ListItem("Actividades", "-10"));
        ddlActividad.Items.Add(new ListItem("Nueva","-1"));
        txtFecha.Text = lblFecha.Text;

        ddlActividad.Visible = true;
        txtActividadCliente.Visible = false;
        if (int.Parse(ddlActividadTipo.SelectedValue) == -1)
        {
            ddlActividad.Visible = false;
            txtActividadCliente.Visible = true;

        }
        else
        {
            App_Negocio.Actividad act = new App_Negocio.Actividad();
            DataTable dt = act.ActividadxTipo(int.Parse(ddlActividadTipo.SelectedValue));

            ddlActividad.DataSource = dt;
            ddlActividad.DataTextField = "Nombre";
            ddlActividad.DataValueField = "Id";
            ddlActividad.DataBind();
        }
    }

    protected void cargarActividadxTipo()
    {
        App_Negocio.Actividad act = new App_Negocio.Actividad();

        DataTable dt = act.popularActividadxTipo(int.Parse(ddlActividadTipo.SelectedValue));

        ddlActividadTipo.DataSource = dt;
        ddlActividadTipo.DataTextField = "Nombre";
        ddlActividadTipo.DataValueField = "Id";
        ddlActividadTipo.DataBind();

    }

    protected void btnAgregarActividad_Click(object sender, EventArgs e)
    {
        LinkedList<CronogramaGui> cronGuiLinkedList = (LinkedList<CronogramaGui>)Session["ActividadesGui"];
        DateTime fechaYHora = DateTime.Parse(txtFecha.Text); //new DateTime();
        //fechaYHora.AddHours (int.Parse(txtHora.Text));
        //fechaYHora.AddMinutes (int.Parse(txtMin.Text));

        DateTime hora = new DateTime(fechaYHora.Year, fechaYHora.Month, fechaYHora.Day, int.Parse(txtHora.Text), int.Parse(txtMin.Text), 0);

        string descripcion = tbxObservacion.Text;
        App_Negocio.Actividad act = new App_Negocio.Actividad();

        if (int.Parse(ddlActividad.SelectedValue) == -1)
        {
            act.Nombre = txtActividadCliente.Text;
            act.Id = -1;
        }
        else
        {
            act.Nombre = ddlActividad.SelectedItem.Text;
            act.Id = int.Parse(ddlActividad.SelectedValue);
        }

        CronogramaGui crGui = new CronogramaGui(hora, descripcion, act);
        cronGuiLinkedList.AddLast(crGui);

        gvActividades.DataSource = cronGuiLinkedList;
        gvActividades.DataBind();
        Session["ActividadesGui"] = cronGuiLinkedList;

        tbxObservacion.Text = "";

    }

    protected void gvActividades_BorrarFila(object sender, GridViewDeleteEventArgs e)
    {
        LinkedList<CronogramaGui> cronList = (LinkedList<CronogramaGui>)Session["ActividadesGui"];
        CronogramaGui cgui = cronList.ElementAt<CronogramaGui>(e.RowIndex);
        cronList.Remove(cgui);
        gvActividades.DataSource = cronList;
        gvActividades.DataBind();
        Session["ActividadesGui"] = cronList;

    }

    protected void btnConfirmar_Click(object sender, EventArgs e)
    {
        LinkedList<CronogramaGui> cronGuiLinkedList = (LinkedList<CronogramaGui>)Session["ActividadesGui"];
        List<App_Negocio.Cronograma> cronograma = new List<App_Negocio.Cronograma>();

        App_Negocio.Evento evento = new App_Negocio.Evento();
        evento.Id = int.Parse(lblEvento.Text);


        foreach (CronogramaGui cGui in cronGuiLinkedList)
        {
            App_Negocio.Actividad act = new App_Negocio.Actividad();
            act.Id = cGui.IdActividad;
            act.Nombre = cGui.Nombre;
            App_Negocio.Cronograma cron = new App_Negocio.Cronograma();
            cron.Actividad = new App_Negocio.Actividad();
            cron.Actividad = act;
            cron.Observacion = cGui.Descripcion;
            cron.FechayHora = cGui.Hora;

            cronograma.Add(cron);
        }
        evento.Actividades = cronograma;

        evento.guardarActividades();
        Response.Redirect("Mostrar_Evento.aspx");

    }
    protected void ddlActividad_SelectedIndexChanged(object sender, EventArgs e)
    {

        if (ddlActividad.SelectedIndex == 1)
        {
            ddlActividad.Visible = false;
            txtActividadCliente.Visible = true;
        }

    }
    protected void btnSalir1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Mostrar_Evento.aspx");
    }
}